package com.tlvip.design.adapter.v2;

/**
 * <p>description：</p>
 *
 * 当你希望使用某些现有类，但其接口与你的其他代码不兼容时，请使用适配器
 * 当你希望重用几个现有的类，这些子类缺少一些不能添加到超类中的公共功能时，请使用该模式
 *
 * Spring
 *  ApplicationListener 根据不同事件做不同处理
 *
 * JDK
 *  Arrays.asList 根据不同类型创建不同类型数组；
 *
 * <p>copyright： copyright(C)2016-2099</p>
 * <p>Life is short,we need passion</p>
 * <p>Summary： </p>
 * <p>instructions： </p>
 * Date 2021/8/14</p>
 * Author mac
 *
 * @version 1.0
 */
public class TestClassAdapter {
    public static void main(String[] args) {
        Adapter adapter = new Adapter();
        adapter.output5v();
        // adapter.output220v(); //对接口有污染，不符合迪米特法则 手机适配器不该能输出220v
    }
}

class Adaptee {
    public int output220v() {
        return 220;
    }
}

interface Target {
    int output5v();
}

// 类适配器模式，本质通过继承,
// 缺点：对接口有污染，不符合迪米特法则
// 对象适配器使用组合
//
class Adapter extends Adaptee implements Target{

    @Override
    public int output5v() {
        int i = output220v();
        System.out.println(String.format("原始电压:%d v -> 输出电压:%d v", i, 5));
        return 5;
    }
}
